package ve.usb.ddp.hibernate;

import ve.usb.cohesion.runtime.LocalDate;

import ve.usb.cohesion.runtime.LocalDate;

import java.util.HashSet;
import java.util.Set;


public class Paa implements java.io.Serializable, ve.usb.cohesion.runtime.Auditable {

    /** Creates a new instance of Paa */
    public Paa() {}
    
    /**
     * Holds value of property id.
     */
    private Long id;

    /**
     * Getter for property id.
     * @return Value of property id.
     */
    public Long getId() {
        return this.id;
    }

    /**
     * Holds value of property idPaa.
     */
    private long idPaa;

    /**
     * Getter for property idPaa.
     * @return Value of property idPaa.
     */
    public long getIdPaa() {
        return this.idPaa;
    }

    /**
     * Setter for property idPaa.
     * @param idPaa New value of property idPaa.
     */
    public void setIdPaa(long idPaa) {
        this.id = this.idPaa = idPaa;
    }
    /**
     * Holds value of property universidad.
     */
    private String universidad = "";

    /**
     * Getter for property universidad.
     * @return Value of property universidad.
     */
    public String getUniversidad() {
        return this.universidad;
    }

    /**
     * Setter for property universidad.
     * @param universidad New value of property universidad.
     */
    public void setUniversidad(String universidad) {
        this.universidad = universidad;
    }
    /**
     * Holds value of property pais.
     */
    private String pais = "";

    /**
     * Getter for property pais.
     * @return Value of property pais.
     */
    public String getPais() {
        return this.pais;
    }

    /**
     * Setter for property pais.
     * @param pais New value of property pais.
     */
    public void setPais(String pais) {
        this.pais = pais;
    }
    /**
     * Holds value of property modalidad.
     */
    private String modalidad = "";

    /**
     * Getter for property modalidad.
     * @return Value of property modalidad.
     */
    public String getModalidad() {
        return this.modalidad;
    }

    /**
     * Setter for property modalidad.
     * @param modalidad New value of property modalidad.
     */
    public void setModalidad(String modalidad) {
        this.modalidad = modalidad;
    }
    /**
     * Holds value of property fecha_inicio.
     */
    private java.util.Date fecha_inicio;

    /**
     * Getter for property fecha_inicio.
     * @return Value of property fecha_inicio.
     */
    public java.util.Date getFecha_inicio() {
        return this.fecha_inicio;
    }

    /**
     * Setter for property fecha_inicio.
     * @param fecha_inicio New value of property fecha_inicio.
     */
    public void setFecha_inicio(java.util.Date fecha_inicio) {
        if (fecha_inicio==null || fecha_inicio instanceof LocalDate) 
            this.fecha_inicio = fecha_inicio;
        else this.fecha_inicio = new LocalDate(fecha_inicio);
    }
    /**
     * Holds value of property fecha_culminacion.
     */
    private java.util.Date fecha_culminacion;

    /**
     * Getter for property fecha_culminacion.
     * @return Value of property fecha_culminacion.
     */
    public java.util.Date getFecha_culminacion() {
        return this.fecha_culminacion;
    }

    /**
     * Setter for property fecha_culminacion.
     * @param fecha_culminacion New value of property fecha_culminacion.
     */
    public void setFecha_culminacion(java.util.Date fecha_culminacion) {
        if (fecha_culminacion==null || fecha_culminacion instanceof LocalDate) 
            this.fecha_culminacion = fecha_culminacion;
        else this.fecha_culminacion = new LocalDate(fecha_culminacion);
    }
    /**
     * Holds value of property fuente_financiamiento.
     */
    private String fuente_financiamiento = "";

    /**
     * Getter for property fuente_financiamiento.
     * @return Value of property fuente_financiamiento.
     */
    public String getFuente_financiamiento() {
        return this.fuente_financiamiento;
    }

    /**
     * Setter for property fuente_financiamiento.
     * @param fuente_financiamiento New value of property fuente_financiamiento.
     */
    public void setFuente_financiamiento(String fuente_financiamiento) {
        this.fuente_financiamiento = fuente_financiamiento;
    }
    /**
     * Holds value of property tipo_financiamiento.
     */
    private String tipo_financiamiento = "";

    /**
     * Getter for property tipo_financiamiento.
     * @return Value of property tipo_financiamiento.
     */
    public String getTipo_financiamiento() {
        return this.tipo_financiamiento;
    }

    /**
     * Setter for property tipo_financiamiento.
     * @param tipo_financiamiento New value of property tipo_financiamiento.
     */
    public void setTipo_financiamiento(String tipo_financiamiento) {
        this.tipo_financiamiento = tipo_financiamiento;
    }
    /**
     * Holds value of property monto_financiamiento.
     */
    private int monto_financiamiento;

    /**
     * Getter for property monto_financiamiento.
     * @return Value of property monto_financiamiento.
     */
    public int getMonto_financiamiento() {
        return this.monto_financiamiento;
    }

    /**
     * Setter for property monto_financiamiento.
     * @param monto_financiamiento New value of property monto_financiamiento.
     */
    public void setMonto_financiamiento(int monto_financiamiento) {
        this.monto_financiamiento = monto_financiamiento;
    }
    /**
     * Holds value of property observaciones.
     */
    private Set<Observacion_Paa> observaciones = new HashSet<Observacion_Paa>();

    /**
     * Getter for property observaciones.
     * @return Value of property observaciones.
     */
    public Set<Observacion_Paa> getObservaciones() {
        return this.observaciones;
    }

    /**
     * Setter for property observaciones.
     * @param observaciones New value of property observaciones.
     */
    public void setObservaciones(Set<Observacion_Paa> observaciones) {
        this.observaciones = observaciones;
    }

    /**
     * Add an element to set property observaciones
     * and sets elements's property paa.
     * @param element New element to be added to observaciones.
     */
    public void addToObservaciones(Observacion_Paa element) {
        element.setPaa(this);
        observaciones.add(element);
    }

    /**
     * Removes and old element from set observaciones 
     * and sets element's property paa to null.
     * @param old The element to be removed from observaciones
     */
    public void removeFromObservaciones(Observacion_Paa old) {
        observaciones.remove(old);
        old.setPaa(null);
    }
    /**
     * Holds value of property profesor.
     */
    private Profesor profesor;

    /**
     * Getter for property profesor.
     * @return Value of property profesor.
     */
    public Profesor getProfesor() {
        return this.profesor;
    }

    /**
     * Setter for property profesor.
     * @param profesor New value of property profesor.
     */
    public void setProfesor(Profesor profesor) {
        this.profesor = profesor;
    }



    public String toString() {
        return "<Paa id='C" + this.id +
        //idPaa
        "\" universidad =\"" + universidad +
        "\" pais =\"" + pais +
        "\" modalidad =\"" + modalidad +
        "\" fecha_inicio =\"" + fecha_inicio +
        "\" fecha_culminacion =\"" + fecha_culminacion +
        "\" fuente_financiamiento =\"" + fuente_financiamiento +
        "\" tipo_financiamiento =\"" + tipo_financiamiento +
        "\" monto_financiamiento =\"" + monto_financiamiento +
        //observaciones
        ((profesor==null) ? "" : "\" profesor =\"C" + profesor.getId()) +
        "'/>";
    }

}